Fine-tuning
Платформа Compressa позволяется дообучить LLM модель быстро и эффективно с помощью LoRA/QLoRA адаптеров. Дообучение позволяет улучшить качество ответов на конкретной бизнес-задаче, сфокусировать на определенной теме или задать формат/стиль ответов.
Важно! Дообучение модели доступно только в on-premise версии платформы, запущенной на ваших серверах.
Прежде чем переходить к дообучению, рекомендуется провести эксперименты с выбором оптимальной модели и промптингом.
Подготовка данных
Для дообучения вам понадобятся диалоговые данные. Вам необходимо:
-
Подготовить примеры целевых диалогов
-
Отформатировать их в формате JSON Lines, где каждая строка содержит следующий контент:
Compressa allows to fine-tune models on chat data. To start the process you should:
- Prepare conversation examples
- Format them into JSON Lines format with the next content on each line:
{
"messages": [
{
"role": "user",
"content": "<USER MESSAGE 1>"
},
{
"role": "bot",
"content": " <BOT'S RESPONSE>"
},
{
"role": "user",
"content": "<USER MESSAGE 2>"
},
{
"role": "bot",
"content": " <BOT'S RESPONSE2>"
},
]
}
Каждый диалог может включать любое количество сообщений. Для эффективного дообучения набор данных должен содержать не менее 100 примеров.
Дообучение
После подготовки данных можно запустить процесс обучения через UI интерфейс Compressa Fine-tuning или с использованием REST API. Ниже мы рассмотрим оба этих варианта.
Дообучение через UI
URL: http://localhost:8080/pod-1/finetune/
Чтобы дообучить модель через UI интерфейс, необходимо:
- Выбрать LLM модель в левой панели
- Ввести название для вашей дообученной версии
- Загрузить jsonl файл в форму
- Нажать кнопку Finetune
Процесс дообучения можно отслеживать в дэшборде AIM. Для этого нажмите Training Dashboard после запуска процесса.
В дэшборде вы можете выбрать конкретный запуск процесс дообучения по названию, которое вы указали на предыдущем шаге, и посмотреть ключевые метрики
Дообучение через REST API
Управление датасетами
GET /v1/datasets/
Получить список доступных датасетов.
Пример запроса:
curl -X 'GET' \
'http://localhost:8080/pod-1/api/v1/datasets/' \
-H 'accept: application/json'
Пример ответа:
[
{
"id": "01be6d68-f790-434b-aa6d-5bd492aef202",
"name": "train.jsonl",
"s3_path": "01be6d68-f790-434b-aa6d-5bd492aef202/metadata.json",
"description": null
},
{
"id": "077adb68-2b0e-481b-bd13-e8807adf625f",
"name": "train.jsonl",
"s3_path": "077adb68-2b0e-481b-bd13-e8807adf625f/metadata.json",
"description": "My dataset 2"
}
]
POST /v1/datasets/upload/
Загрузить новый датасет (только ‘jsonl’ формат).
Параметры:
- query:
description
- dataset description
Тело запроса:
- multipart/form-data:
file
Пример запроса:
curl -X 'POST' \
'http://localhost:8080/pod-1/api/v1/datasets/upload/?description=My%20Description' \
-H 'accept: application/json' \
-H 'Content-Type: multipart/form-data' \
-F 'file=@train.jsonl'
Пример ответа:
{
"id": "string",
"name": "string",
"s3_path": "string",
"description": "string"
}
GET /v1/datasets/{dataset_id}/
Загрузить конкретный датасет по id dataset_id
Параметры:
- path:
dataset_id
Пример запроса:
curl -X 'GET' \
'http://localhost:8080/pod-1/api/v1/datasets/01be6d68-f790-434b-aa6d-5bd492aef202/' \
-H 'accept: application/json'
Пример ответа:
file
Дообучение модели
GET /v1/finetune/models/
Получить список моделей, доступных для дообучения
Пример запроса:
curl -X 'GET' \
'http://localhost:8080/pod-1/api/v1/finetune/models/' \
-H 'accept: application/json'
Пример ответа:
[
{
"model_id": "TheBloke/mixtral-8x7b-v0.1-AWQ",
"adapter": false,
"base_model_id": null
},
{
"model_id": "NeuralNovel/Mistral-7B-Instruct-v0.2-Neural-Story",
"adapter": false,
"base_model_id": null
}
]
POST /v1/finetune/
Запустить дообучение модели на датасете
Тело запроса:
{
"name": "string",
"model_id": "string",
"dataset_id": "string"
}
name
- name of trainingmodel_id
- id of model to traindataset_id
- id of dataset to train on
Пример запроса:
curl -X 'POST' \
'http://localhost:8080/pod-1/api/v1/finetune/' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"name": "My Adapter Training",
"model_id": "NousResearch/Llama-2-7b-chat-hf",
"dataset_id": "01be6d68-f790-434b-aa6d-5bd492aef202"
}'
Пример ответа:
{
"id": "74280be7-4723-475d-89ae-346e9017990e",
"name": "FT_NousResearch/Llama-2-7b-chat-hf_01be6d68-f790-434b-aa6d-5bd492aef202",
"status": "CREATED",
"started_at": "2024-03-21T10:40:40.928442"
}
GET /v1/finetune/status
Получить статус текущего процесса дообучения
Пример запроса:
curl -X 'GET' \
'http://localhost:8080/pod-1/api/v1/finetune/status/' \
-H 'accept: application/json'
Пример ответа:
{
"id": "46c155b4-17fe-4226-9412-a77edfadc7e7",
"name": "My Adapter Training",
"model_id": "NousResearch/Llama-2-7b-chat-hf",
"dataset_id": "01be6d68-f790-434b-aa6d-5bd492aef202",
"job": {
"id": "74280be7-4723-475d-89ae-346e9017990e",
"name": "FT_NousResearch/Llama-2-7b-chat-hf_01be6d68-f790-434b-aa6d-5bd492aef202",
"status": "RUNNING",
"started_at": "2024-03-21T10:40:40.928442"
}
}
POST /v1/finetune/interrupt/
Прервать процесс дообучения
Пример запрос:
curl -X 'POST' \
'http://localhost:8080/pod-1/api/v1/finetune/interrupt/' \
-H 'accept: application/json' \
-d ''
Пример ответа:
{
"id": "74280be7-4723-475d-89ae-346e9017990e",
"name": "FT_NousResearch/Llama-2-7b-chat-hf_01be6d68-f790-434b-aa6d-5bd492aef202",
"status": "RUNNING",
"started_at": "2024-03-21T10:40:40.928442"
}